package com.bnz.pojo;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
public class Cart {

    //0. 定义map集合存放商品
    Map<String,CartItem> map = new HashMap<>();

    //1. 添加商品到购物车
    public void add(Product product) {
        System.out.println(product);
        //1.1 得到商品id
        String pid = product.getPid();
        System.out.println(pid);
        //1.2 判断购物车里是否包含有此商品,有就修改购买数量
        if (map.containsKey(pid)){
            //1.2.1 修改商品数量
            CartItem cartItem = map.get(product.getPid());
            cartItem.setNum(cartItem.getNum() + 1);
            //1.2.2 修改小计
            cartItem.setTotal(cartItem.getNum() * product.getPrice());
        }
        else{       //1.3 如果不存在就构造购物项，并添加到map中
            //1.3.1 定义购物项对象
            CartItem item = new CartItem(product,1,product.getPrice());
            //1.3.2 将购物项添加到map中
            map.put(product.getPid(),item);

        }
        //1.3 修改库存
        product.setQuantity(product.getQuantity() -1);
    }

    //2. 移除购物
    public void remove(String pid) {
        //2.1 恢复库存
        //2.1.1 得到购物项
        CartItem cartItem = map.get(pid);
        //2.1.2 得到购物项关联商品
        Product product = cartItem.getProduct();
        //2.1.3 修改库存
        product.setQuantity(product.getQuantity() + cartItem.getNum());
        //2.2 从购物车中清除此商品
        map.remove(pid);
    }

    //3. 清空购物车
    public void clear() {
        //3.1 恢复所有商品的库存
        for (CartItem item : map.values()) {
            //3.1.1 得到相关联的购物项对象
            Product product = item.getProduct();
            //3.1.2 修改购物项的库存
            product.setQuantity(product.getQuantity() + item.getNum());
        }
        //3.2 清空商品
        map.clear();
    }
}
